import axios from 'axios'
import { serverToken } from '@/stores'
import { ElMessage } from 'element-plus'
import router from '@/router'

// const baseURL = 'http://644480ff.r5.cpolar.cn'
const baseURL = 'http://127.0.0.1:8000'

const instance = axios.create({
    // TODO 1. 基础地址，超时时间
    baseURL,
    timeout: 10000
})
//----------------------- 请求拦截器---------------------------
instance.interceptors.request.use(
    (config) => {
        // TODO 2. 携带token

        if (serverToken.value) {
            config.headers.Authorization = "Bearer "+serverToken.value
        }
         ('请求成功：', config);
        return config
    },
    (err) => {
         ('请求失败：', err);
        return Promise.reject(err)
    }
)

//------------------------响应拦截器------------------------
instance.interceptors.response.use(
    (res) => {
         ('响应成功：', res);
        // TODO 3. 摘取核心响应数据
        if (res.data.code.toString().substring(0,1) === '2') {
            
            return res
        }

        //登录异常
        if (res.data.code === 403 || res.data.code === 401) {
            ElMessage.error("账号异常，请重新登录！")
            router.push('/login')
            return res
        }

        // TODO 4. 处理业务失败
        ElMessage.error(res.msg || '服务异常')

        return Promise.reject(res)
    },
    (err) => {
        // TODO 5. 处理401错误
        // 错误的特殊情况 => 401 权限不足 或 token过期 => 拦截到登录页面
        if (err.response?.status === 401) {
            router.push('/login')
        }

        // 错误的默认情况 => 只要给提示        
        ElMessage.error(err.response.data.msg || '服务异常')
        return Promise.reject(err)
    }
)

export default instance
export { baseURL }
